﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Enyim.Caching;
//using Enyim.Caching.Memcached;

//namespace MiniFox.Caching
//{
//    /// <summary>
//    /// 
//    /// </summary>
//    internal class MemcacheProvider : CacheProvider, IDisposable
//    {
//        // Fields
//        private MemcachedClient _client;
//        /// <summary>
//        /// 
//        /// </summary>
//        public MemcacheProvider() : this(3600)
//        {
//        }
//        /// <summary>
//        /// 
//        /// </summary>
//        /// <param name="defaultExpireSeconds"></param>
//        public MemcacheProvider(int defaultExpireSeconds) : this(string.Empty, string.Empty, defaultExpireSeconds)
//        {
//        }
//        /// <summary>
//        /// 
//        /// </summary>
//        /// <param name="keyPrefix"></param>
//        /// <param name="keySuffix"></param>
//        /// <param name="defaultExpireSeconds"></param>
//        public MemcacheProvider(string keyPrefix, string keySuffix, int defaultExpireSeconds) : base(keyPrefix, keySuffix, defaultExpireSeconds)
//        {
//            _client = new MemcachedClient();
//        }
        
//        /// <summary>
//        /// 
//        /// </summary>
//        /// <param name="key"></param>
//        /// <param name="value"></param>
//        /// <param name="timeSpan"></param>
//        protected override void AddItem(string key, object value, TimeSpan timeSpan)
//        {
//            StoreMode storeMode;
//            if(this._client.TryGet(key, out object val))
//            {
//                storeMode = StoreMode.Set;
//            }
//            else
//            {
//                storeMode = StoreMode.Add;
//            }

//            this._client.Store(storeMode, key, value, timeSpan);
//        }

//        /// <summary>
//        /// 
//        /// </summary>
//        /// <param name="key"></param>
//        /// <returns></returns>
//        protected override object GetItem(string key)
//        {
//            return this._client.Get(key);
//        }
//        /// <summary>
//        /// 
//        /// </summary>
//        /// <param name="key"></param>
//        protected override void RemoveItem(string key)
//        {
//            this._client.Remove(key);
//        }
//        //public override void Initialize(string name, NameValueCollection config)
//        //{
//        //    if (config == null)
//        //    {
//        //        throw new ArgumentNullException("config");
//        //    }
//        //    if (string.IsNullOrEmpty(name))
//        //    {
//        //        name = "MemcachedProviders.CacheProvider";
//        //    }
//        //    if (string.IsNullOrEmpty(config["description"]))
//        //    {
//        //        config.Remove("description");
//        //        config.Add("description", "Memcached Cache Provider");
//        //    }
//        //    base.Initialize(name, config);
//        //    this._lDefaultExpireTime = string.IsNullOrEmpty(config["defaultExpireTime"]) ? 2000 : Convert.ToInt64(config["defaultExpireTime"]);
//        //    this._strKeySuffix = string.IsNullOrEmpty(config["keySuffix"]) ? string.Empty : config["keySuffix"];
//        //    this._client = new MemcachedClient();
//        //}
//        /// <summary>
//        /// 
//        /// </summary>
//        public override void RemoveAll()
//        {
//            this._client.FlushAll();
//        }

//        /// <summary>
//        /// 
//        /// </summary>
//        /// <param name="key"></param>
//        /// <returns></returns>
//        protected override bool ContainItem(string key)
//        {
//            throw new NotImplementedException();
//        }
//        /// <summary>
//        /// 
//        /// </summary>
//        public void Dispose()
//        {
//            this.Dispose(true);
//        }
//        /// <summary>
//        /// 清理所有正在使用的资源。
//        /// </summary>
//        /// <param name="disposing">如果应释放托管资源，为 true；否则为 false。</param>
//        protected virtual void Dispose(bool disposing)
//        {
//            if (disposing && (this._client != null))
//            {
//                _client.Dispose();
//            }
//        }

//    }
//}
